package com.nbcio.pm.mapper;

import com.nbcio.pm.domain.vo.*;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * 项目管理报表统计Mapper接口
 *
 * @author nbacheng
 */
public interface PmReportStatsMapper {

    /**
     * 查询项目统计
     *
     * @param tenantId 租户ID
     * @return 项目统计
     */
    PmProjectStatsVo selectProjectStats(@Param("tenantId") String tenantId);

    /**
     * 查询任务统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID
     * @return 任务统计
     */
    PmTaskStatsVo selectTaskStats(@Param("tenantId") String tenantId, @Param("projectId") Long projectId);

    /**
     * 查询时间统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 时间统计
     */
    PmTimeStatsVo selectTimeStats(@Param("tenantId") String tenantId, @Param("projectId") Long projectId, 
                                  @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);

    /**
     * 查询成员统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID
     * @return 成员统计
     */
    PmMemberStatsVo selectMemberStats(@Param("tenantId") String tenantId, @Param("projectId") Long projectId);

    /**
     * 查询项目进度统计
     *
     * @param tenantId 租户ID
     * @return 项目进度统计列表
     */
    List<PmProjectProgressStatsVo> selectProjectProgressStats(@Param("tenantId") String tenantId);

    /**
     * 查询任务状态分布统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID
     * @return 任务状态分布统计列表
     */
    List<PmTaskStatusStatsVo> selectTaskStatusStats(@Param("tenantId") String tenantId, @Param("projectId") Long projectId);

    /**
     * 查询时间跟踪统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 时间跟踪统计列表
     */
    List<PmTimeTrackingStatsVo> selectTimeTrackingStats(@Param("tenantId") String tenantId, @Param("projectId") Long projectId,
                                                        @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
}
